﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace SP2010.Enhancements.Management
{
    static class HTMLManager
    {
        /// <summary>
        /// Compiled regular expression for performance.
        /// </summary>
        private static Regex _htmlRegex = new Regex("<.*?>", RegexOptions.Compiled);

        // <summary>
        /// Remove HTML from string with Regex.
        /// </summary>
        internal static string StripTagsRegex(string source)
        {
            try
            {
                return Regex.Replace(source, "<.*?>", string.Empty);
            }
            catch
            {
                throw;
            }  
        }       

        /// <summary>
        /// Remove HTML from string with compiled Regex.
        /// </summary>
        internal static string StripTagsRegexCompiled(string source)
        {
            try
            {
                return _htmlRegex.Replace(source, string.Empty);
            }
            catch
            {
                throw;
            }  
        }

        /// <summary>
        /// Remove HTML tags from string using char array.
        /// </summary>
        internal static string StripTagsCharArray(string source)
        {
            try
            {
                char[] array = new char[source.Length];
                int arrayIndex = 0;
                bool inside = false;

                for (int i = 0; i < source.Length; i++)
                {
                    char let = source[i];
                    if (let == '<')
                    {
                        inside = true;
                        continue;
                    }
                    if (let == '>')
                    {
                        inside = false;
                        continue;
                    }
                    if (!inside)
                    {
                        array[arrayIndex] = let;
                        arrayIndex++;
                    }
                }
                return new string(array, 0, arrayIndex);
            }
            catch
            {
                throw;
            }  
        }
    }
}
